iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0

首先第二天我們可以先展示lstm在股票預測的上面,以下是程式碼

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
from sklearn.metrics import mean_squared_error

# 載入數據集
df = pd.read_csv('your_stock_data.csv')  # 替換為您的股票數據檔案
df.head()

# 設定時間序列數據
data = df['Close'].values
data = data.reshape(-1, 1)

# 資料正規化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

# 設定訓練數據和測試數據
training_data_len = int(np.ceil(len(scaled_data) * 0.8))

train_data = scaled_data[0:int(training_data_len), :]
test_data = scaled_data[training_data_len - 60:, :]

# 創建資料集
def create_dataset(data, time_step=1):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        X.append(data[i:(i + time_step), 0])
        y.append(data[i + time_step, 0])
    return np.array(X), np.array(y)

time_step = 60
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)

# 調整資料形狀
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

# 建立LSTM模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(25))
model.add(Dense(1))

# 編譯模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 訓練模型
model.fit(X_train, y_train, batch_size=1, epochs=1)

# 預測
train_predict = model.predict(X_train)
test_predict = model.predict(X_test)

# 反正規化
train_predict = scaler.inverse_transform(train_predict)
y_train = scaler.inverse_transform([y_train])
test_predict = scaler.inverse_transform(test_predict)
y_test = scaler.inverse_transform([y_test])

# 計算RMSE
train_rmse = np.sqrt(mean_squared_error(y_train[0], train_predict[:, 0]))
test_rmse = np.sqrt(mean_squared_error(y_test[0], test_predict[:, 0]))
print(f'Train RMSE: {train_rmse}')
print(f'Test RMSE: {test_rmse}')

# 繪圖
train_data_len = training_data_len - 60

train = data[:train_data_len]
valid = data[train_data_len:]
valid = np.concatenate((valid, test_predict), axis=0)

plt.figure(figsize=(16, 8))
plt.title('LSTM Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Close Price USD ($)')
plt.plot(train)
plt.plot(valid, color='red')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()

這段程式碼主要應用於使用長短期記憶(LSTM)模型進行股票價格預測。LSTM是一種特殊的遞歸神經網絡(RNN),特別適合於處理和預測基於時間序列的數據,例如股票價格。

數據處理

首先,程式碼從CSV文件中載入股票數據,並選擇收盤價('Close')作為預測目標。因為神經網絡對數據的標準化要求較高,所以使用MinMaxScaler將數據正規化到[0,1]範圍。接著,將數據分割為訓練集(80%)和測試集(20%),並進行時間步長的資料集創建。這一步是為了將時間序列數據轉換為LSTM所需的輸入格式,即每一個時間點的數據都包括前n個時間步長的數據。

模型構建

LSTM模型由兩層組成,每層都有50個單元。第一層return_sequences=True表示該層將返回所有時間步長的序列,而不是僅返回最後一步。這使得後續的LSTM層可以接收完整的時間步長序列。接下來是一個包含25個神經元的全連接層,最後是一個單一神經元的輸出層,負責預測下一步的收盤價。

模型使用Adam優化器和均方誤差(MSE)作為損失函數來編譯。Adam是一種計算效率高且需要較少內存的優化算法,特別適合於處理大規模數據和高維數據。

模型訓練與預測

模型使用訓練集數據進行訓練,每次一個批次,訓練一次(epoch)。在訓練完成後,模型會生成訓練集和測試集的預測值。這些預測值通過逆向正規化轉換回原始的股票價格,以便於理解和評估模型的預測性能。

為了評估模型性能,程式碼計算了訓練集和測試集的均方根誤差(RMSE)。RMSE是一種用於衡量預測值與實際值之間差異的指標,值越小,表示模型的預測效果越好。

結果視覺化

最後,程式碼將訓練集和測試集的實際值與預測值繪製成圖,以直觀地展示模型的預測能力。這樣的視覺化能幫助我們更好地理解模型的性能和預測結果的準確性。

這個LSTM股票價格預測模型是一個基礎範例,展示了如何使用深度學習技術處理和預測金融時間序列數據。通過進一步調整和優化,這個模型可以應用於更多的金融數據分析和預測任務。


上一篇
基於深度學習的多斑馬魚追蹤之研究Lstm與Yolo 的初步介紹
下一篇
day 3 Lstm天氣預測
系列文
LSTM結合Yolo v8對於多隻斑馬魚行為分析29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言